package com.cicc.beergamevirtualsimulationsystem.model.echarts.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.lang.ref.PhantomReference;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName EchartsVo
 * @Description TODO
 * @Date 2024/11/6 17:09
 * @Version 1.0
 */


@Data
public class EchartsVo {
    private List<String> categories;  // 存储周期数据
    private List<SeriesData> series;  // 存储不同的数据系列
    private String xTitle;  // X轴标题
    private String yTitle;  // Y轴标题
    private ChartOptions chartOptions;  // 图表的额外配置，如多个 Y 轴
    private Integer profit;  //利润
    /**
     * 全部角色姓名
     */
    private List<String> totalRole;

    private Integer maxValue;
    private Integer minValue;

    // 静态内部类：SeriesData  存储Y轴数据
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class SeriesData {
        private String name;  // 数据系列的名称
//        private  String operation;//操作
        private List<Integer> data;  // 对应的数据值
        private Integer index;  // 对应的 Y 轴索引，0表示第一个 Y 轴，1表示第二个 Y 轴等
        private List<DataWithLabel> dataLabels;
        private String identifier; //订货量 发货量的标识

        public SeriesData(String name) {
            this.name = name;
        }

        public List<Integer> getData() {
            if (data == null) {
                data = new ArrayList<>();  // 如果 data 为 null，则初始化为空列表
            }
            return data;
        }


  }

    @Data
    public static class ChartOptions {
        private Axis xAxis;  // X 轴配置
        private List<Axis> yAxisList;  // Y 轴配置（支持多个 Y 轴）

        // Getter 和 Setter
        public Axis getxAxis() {
            return xAxis;
        }

        public void setxAxis(Axis xAxis) {
            this.xAxis = xAxis;
        }

        public List<Axis> getyAxisList() {
            return yAxisList;
        }

        public void setyAxisList(List<Axis> yAxisList) {
            this.yAxisList = yAxisList;
        }
    }

    @Data
    public static class Axis {
        private String name;  // 轴名称
        private String position = "left";
        private String type = "value";  // 轴的类型，默认是数值型
//        private Integer offset;  // 偏移量（仅对右侧的 Y 轴有效）
        private String unit;  //单位

        // 提供一个带参数的构造方法，方便初始化时传入参数
        public Axis(String name, String position,String unit) {
            this.name = name;
            this.position = position;
            this.unit=unit;        }
    }


    @Data
    @NoArgsConstructor
    public static class DataWithLabel {
        private String label;
        private int value;

        public DataWithLabel(String label, int value) {
            this.label = label;
            this.value = value;
        }
    }




}


